import java.util.HashMap;
import java.util.Map;

import msigraphx.gibbsSampler.RandomVariableValue;
import msigraphx.gibbsSampler.VarDistr;
import msigraphx.graph.BayesianNetwork;


public class AnalitykBankowy {
	
	public static void main(String[] args) throws Exception {
		BayesianNetwork bayesianNetwork = BayesianNetwork.NetworkFromFileReader.readFromFile("MSIGraphX/analitykBanowySmall.txt");
		boolean networkOk = bayesianNetwork.checkConsistency();
		System.out.println("networkOk = "+networkOk);
		
		Map<String,RandomVariableValue<String>> knownVariables = new HashMap<String,RandomVariableValue<String>>();
		
		//w ostatnich dwóch miesiącach wzrosła liczba przelewów wychodzących do innych banków
		knownVariables.put("o7", bayesianNetwork.getVertex("o7").getAllowedValue(0));
		
		//nasz bank ma dobrą ofertę lokatową w porównaniu z innymi bankami na rynku
		knownVariables.put("o5", bayesianNetwork.getVertex("o5").getAllowedValue(0));
		
		//klient jest nim w naszym banku od dawna
		knownVariables.put("o6", bayesianNetwork.getVertex("o6").getAllowedValue(1));
		
		
		//szukane: klient X zostanie w banku bez względu na nasze działania
		String soughtVariableLabel = "h2";
		
		VarDistr<String> resultVarDistr = bayesianNetwork.computeVarDistrByKnownVariables(knownVariables, soughtVariableLabel, 100000);
		
		System.out.println("resultVarDistr = "+resultVarDistr);
	}
}
